package com.zhong.beautifulimageapp.network;

import com.zhong.beautifulimageapp.model.TopicBriefList;
import com.zhong.beautifulimageapp.model.TopicDetail;
import com.zhong.beautifulimageapp.model.UserAfterLoginInfo;
import com.zhong.beautifulimageapp.model.UserDetailInfo;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * 网络操作
 * Created by 俊峰 on 2017/7/10.
 */

public interface GetContentFromNetwork {

    /**
     * 获取主题首页的内容
     * @param tab 主题分类，取值范围是{‘all’，‘ask’，‘share’，‘job’，‘good’},
     *             意义：all为全部；ask为问答；share为分享；job为招聘；good为精华
     * @param page 页数
     * @param limit 每一页的主题数量
     * @param mdrender String类型，当为 false 时，不渲染。
     *                  默认为 true，渲染出现的所有 markdown 格式文本。
     * @return 可被观察的对象
     */
    @GET("topics")
    Observable<TopicBriefList> getTopicListContent(@Query("tab") String tab,
                                                   @Query("page") String page,
                                                   @Query("limit") String limit,
                                                   @Query("mdrender") String mdrender);

    /**
     * 获取主题的详细内容
     * @param id 主题的id
     * @param mdrender String类型，当为 false 时，不渲染。
     *                  默认为 true，渲染出现的所有 markdown 格式文本。
     * @param accesstoken String类型，当需要知道一个主题是否被特定用户收藏以及对应评论是否被特定用户点赞时，
     *                     才需要带此参数。会影响返回值中的 is_collect 以及 replies 列表中的 is_uped 值。
     * @return 可被观察的对象
     */
    @GET("topic/{id}")
    Observable<TopicDetail> getTopicDetailContent(@Path("id") String id,
                                                  @Query("mdrender") String mdrender,
                                                  @Query("accesstoken") String accesstoken);

    /**
     * 用户通过AccessToken登录
     * @param accessToken 获取的AccessToken
     * @return 返回用户简略信息实体类
     */
    @FormUrlEncoded
    @POST("accesstoken")
    Observable<UserAfterLoginInfo> userLogin(@Field("accesstoken") String accessToken);

    /**
     * 获取用户收藏的话题
     * @param loginName 用户名
     * @return 返回用户收藏的话题
     */
    @GET("topic_collect/{loginName}")
    Observable<TopicBriefList> getUserCollectTopic(@Path("loginName") String loginName);

    /**
     * 获取用户详情
     * @param loginName 用户名
     * @return 返回用户详情
     */
    @GET("user/{loginName}")
    Observable<UserDetailInfo> getUserDetailInfo(@Path("loginName") String loginName);

}
